﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Autocentro.BussinesLogic;
using Microsoft.Practices.Unity;
using Autocentro.Entities;
using System.Text.RegularExpressions;

namespace Autocentro.UI
{
    public partial class FrmMttProveedor : Form
    {
        [Dependency]
        public IProveedorBL ProveedorBL { get; set; }

        bool IsNew = true;

        public PROVEEDOR Currentproveedor { get; set; }

        public FrmMttProveedor()
        {
            InitializeComponent();
            this.BuildUp();
        }

        private void FrmMttProveedor_Load(object sender, EventArgs e)
        {
        }

        public void AddProveedorProforma(string ruc)
        {
            pROVEEDORBindingSource.AddNew();
            var prov = pROVEEDORBindingSource.Current as PROVEEDOR;
            prov.Ruc = ruc.ToString();
            pROVEEDORBindingSource.ResetBindings(true);
            //DeshabilitarCampos();
        }

        public void AddProveedor()
        {
            pROVEEDORBindingSource.AddNew();
            DeshabilitarCampos();
        }
        
        public void UpdateProveedor()
        {
            IsNew = false;
            pROVEEDORBindingSource.DataSource = Currentproveedor;
        }

        private void rucTextBox_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (rucTextBox.Text.Length > 0)
                {
                    if (rucTextBox.Text.Length == 11)
                    {
                        CargaProveedor();
                    }
                    else
                    {
                        MessageBox.Show(this, "Longitud de RUC incorrecta", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        rucTextBox.Focus();
                    }
                }
                else
                {
                    MessageBox.Show(this, "Ingrese un número de RUC", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }

        private void rucTextBox_Leave(object sender, EventArgs e)
        {
            var _currProv = pROVEEDORBindingSource.Current as PROVEEDOR;


            if (rucTextBox.Text.Length > 0)
            {
                if (rucTextBox.Text.Length == 11)
                {
                    CargaProveedor();
                }
                else
                {
                    MessageBox.Show(this, "Longitud de RUC incorrecta", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    rucTextBox.Focus();
                }
            }
            else
            {
                MessageBox.Show(this, "Ingrese un número de RUC", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void rucTextBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode == Keys.Tab)
            {
            }

        }

        private void btnOk_Click(object sender, EventArgs e)
        {
            if (rucTextBox.Text.Length > 0)
            {
                if (rucTextBox.Text.Length == 11)
                {
                    CargaProveedor();
                }
                else
                {
                    MessageBox.Show(this, "Longitud de RUC incorrecta", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    rucTextBox.Focus();
                }
            }
            else
            {
                MessageBox.Show(this, "Ingrese un número de RUC", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void CargaProveedor()
        {
            var _CurrProveedor = pROVEEDORBindingSource.Current as PROVEEDOR;

            if (IsNew)
            {
                var proveedor = ProveedorBL.GetFromProveedorByRuc(rucTextBox.Text);

                if (proveedor != null)
                {
                    pROVEEDORBindingSource.DataSource = proveedor;
                    MessageBox.Show("Número de RUC no disponible:\n" + proveedor.RazonSocial + "\n" + proveedor.Ruc, "Mensaje",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.Close();
                }
                else
                {
                    MessageBox.Show("Número de RUC disponible: ", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    HabilitarCampos();
                }
                
            }
            else
            {

                var existe = ProveedorBL.eliminarDuplicidad(rucTextBox.Text, razonSocialTextBox.Text, _CurrProveedor.Id);

                if (existe)
                {
                    DialogResult rpta = MessageBox.Show(this, string.Format("Ya existe un Proveedor con el mismo Número de RUC"),
                        "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    MessageBox.Show(this, "Número de RUC disponible", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }

        private void HabilitarCampos()
        {
            razonSocialTextBox.ReadOnly = false;
            telefonoTextBox.ReadOnly = false;
            direccionTextBox.ReadOnly = false;
            btnGuardar.Enabled = true;
        }

        private void DeshabilitarCampos()
        {
            razonSocialTextBox.ReadOnly = true;
            telefonoTextBox.ReadOnly = true;
            direccionTextBox.ReadOnly = true;
            //btnGuardar.Enabled = true;
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            var _proveedor = pROVEEDORBindingSource.Current as PROVEEDOR;
            var msg = "ERROR";

            if (_proveedor != null)
            {
                _proveedor.Ruc = rucTextBox.Text.ToUpper();
                _proveedor.RazonSocial = razonSocialTextBox.Text.ToUpper();
                _proveedor.Direccion = direccionTextBox.Text.ToUpper();

                if (IsNew)
                {
                    try
                    {
                        ProveedorBL.AddProveedor(_proveedor);
                        IsNew = false;
                        MessageBox.Show("Registro Correcto", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.Close();
                    }
                    catch (Exception ex)
                    {
                        msg = ex.Message;
                        MessageBox.Show(msg, "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else
                {
                    try
                    {
                        ProveedorBL.UpdateProveedor(Currentproveedor);
                        UpdateProveedor();
                        MessageBox.Show("Modificación Correcta", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.Close();
                    }
                    catch (Exception ex)
                    {
                        msg = ex.Message;
                        MessageBox.Show(msg, "Mensaje",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
        }

        private void rucTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void telefonoTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            var numeral = Convert.ToString("#");
            var guion = Convert.ToString("-");
            var asterisc = Convert.ToString("*");

            string cadena = numeral + guion + asterisc + (char)8;

            if ((Char.IsNumber(e.KeyChar)) || cadena.Contains(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void razonSocialTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            //var amberson = Convert.ToString("&");
            //var punto = Convert.ToString(".");
            //var guion = Convert.ToString("-");
            //var coma = Convert.ToString(",");


            //string cadena = amberson  + punto + guion + coma + (char)8;

            //if (Char.IsLetter(e.KeyChar) || cadena.Contains(e.KeyChar))
            //{
            //    e.Handled = false;
            //}
            //else if (Char.IsControl(e.KeyChar))
            //{
            //    e.Handled = false;
            //}
            //else if (Char.IsSeparator(e.KeyChar))
            //{
            //    e.Handled = false;
            //}
            //else
            //{
            //    e.Handled = true;
            //}

        }

        private void direccionTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            var numeral = Convert.ToString("#");
            var punto = Convert.ToString(".");
            var coma = Convert.ToString(",");
            var guion = Convert.ToString("-");

            string cadena = numeral + punto + guion + coma + (char)8;

            if (Char.IsLetter(e.KeyChar) || char.IsNumber(e.KeyChar) || cadena.Contains(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        
    }
}
